/*
 * Copyright 2004-2011 Paolo Conte
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *      http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.jellylab.ojoverse;

import java.lang.reflect.Field;

/**
 *
 * A generic, empty interface
 * 
 */
public abstract class DataObject {

    private transient Field[] fields = this.getClass().getFields();
    private transient String name = this.getClass().getName();

    public Field[] getDataFields() {
        return fields;
    }
    
    public String getName() {
        return name;
    }
    
    public String getSingleName() {
        return name.substring(name.indexOf("$")+1);
    }

    public String toString() {
        String strVal = "[" + getSingleName() + "]";
        for (int idf = 0; idf < fields.length; idf++) {
            Field field = fields[idf];
            field.setAccessible(true);
            if (idf > 0) {
                strVal += ", ";
            }
            strVal += field.getName() + ":";
            try {
                strVal += field.get(this);
            } catch (Exception exc) {
                strVal += "{error}";
            }
        }
        return strVal;
    }
}
